#ifndef     GAME_H_
# define    GAME_H_

# include <List>
# include <SFML/Window.hpp>
# include <SFML/graphics.hpp>
# include "GameObject.h"
# include "IMap.h"
# include "action.h"
# include "Mobile.h"
# include "ObjManager.hpp"
# include "Bullet.h"
# include "AAI.h"
# include "PatrolAI.h"
# include "Graphics/MainGraphic.h"

class Game
{
public:
    Game(MainGraphic & mg, IMap & map);
    ~Game() {}

    void init();
    void update(float elapsedTime, action & action);
    GameObject * getPlayer() { return _player; }

private:
    MainGraphic            & _mg;
    IMap                   & _map;
    ObjManager<Bullet>       _bulletPool;
    ObjManager<PatrolAI>     _patrolPool;
    ObjManager<Mobile>       _mobPool;
    Mobile *                 _player;
    std::list<GameObject*>   _objs;
    std::list<AAI*>          _ais;
};

#endif   /* GAME_H_ */
